package vwg.na.vwm.rh.motorsdk.modelo.procesos.daoimpl;

import java.util.List;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import vwg.na.vwm.rh.motorsdk.modelo.procesos.IdeaProceso;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.dao.IdeParticipanteDAO;
import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.IdeParticipante;
import vwg.na.vwm.rh.rhmotor.modelo.dao.GenericDAO;

@Repository
public class IdeParticipanteDAOImpl extends GenericDAO<IdeParticipante>
	implements IdeParticipanteDAO {

    @SuppressWarnings("unchecked")
    @Override
    @Transactional(readOnly = true, propagation = Propagation.REQUIRED)
    public List<IdeParticipante> getParticipantesByIdea(IdeaProceso ideaProceso) {
	return getHibernateTemplate().find("FROM IdeParticipante as i "
		+ "WHERE i.ideaProceso = ? ", ideaProceso);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void deleteByIdeaAndParticipante(IdeaProceso idea,
	    IdeParticipante ideParticipante) {
	getHibernateTemplate().find("DELETE FROM IdeParticipante as i"
		+ "WHERE i.ideaProceso = ? and i.idParticipante = ?", 
		idea, ideParticipante.getIdParticipante());
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void updateByIdea(IdeaProceso idea, IdeParticipante ideParticipante) {
	getHibernateTemplate().find("UPDATE FROM IdeParticipante as i "
		+ "WHERE i.ideaProceso = ? and i.idParticipante = ?", 
		idea, ideParticipante.getIdParticipante());
	
    }

    @SuppressWarnings("unchecked")
    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public IdeParticipante verificaExistenciaParticipanteByIdea(IdeaProceso ideaProceso,
	    IdeParticipante ideParticipante) {
	List<IdeParticipante> participantes =  getHibernateTemplate().find("FROM IdeParticipante as i "
		+ "WHERE i.ideaProceso = ? and i.idParticipante = ? ", ideaProceso,
		ideParticipante.getIdParticipante());
	return participantes.size() > 0 ? (IdeParticipante)participantes.get(0) : null;
    }

}
